import com.google.gson.Gson;
import groovy.sql.DataSet;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.StringReader;
import java.util.*;

public class CopysRedisUtil {
        public static JedisPool jedisPool = null;
        // Redis服务器IP
//        private static String ADDR = "192.168.3.119";
    private static String ADDR = ToConfigure.INIP;
        // Redis的端口号
        private static int PORT = ToConfigure.INPORT;
        // 访问密码
        private static String AUTH = ToConfigure.INAUTH;

        static JedisPoolConfig config = new JedisPoolConfig();
        /**
         * 初始化Redis连接池
         */
        static {
            try {
                // 连接耗尽时是否阻塞, false报异常,ture阻塞直到超时, 默认true
                config.setBlockWhenExhausted(true);
                // 设置的逐出策略类名, 默认DefaultEvictionPolicy(当连接超过最大空闲时间,或连接数超过最大空闲连接数)
                config.setEvictionPolicyClassName("org.apache.commons.pool2.impl.DefaultEvictionPolicy");
                // 是否启用pool的jmx管理功能, 默认true
                config.setJmxEnabled(true);
                // 最大空闲连接数, 默认8个 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。
                config.setMaxIdle(8);
                // 最大连接数, 默认8个
                config.setMaxTotal(200);
                // 表示当borrow(引入)一个jedis实例时，最大的等待时间，如果超过等待时间，则直接抛出JedisConnectionException；
                config.setMaxWaitMillis(1000 * 100);
                // 在borrow一个jedis实例时，是否提前进行validate操作；如果为true，则得到的jedis实例均是可用的；
                config.setTestOnBorrow(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        /**
         * 获取Jedis实例
         *
         * @return
         */
        public synchronized static Jedis getJedis() {
            try {
                if (jedisPool != null) {
                    Jedis resource = jedisPool.getResource();
                    return resource;
                } else {
                    return null;
                }
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }


        /**
         * 释放jedis资源
         *
         * @param jedis
         */
        public static void close(final Jedis jedis) {
            if (jedis != null) {
                jedis.close();
            }
        }
        //复制数据到Redis中
        public static void copyToRedis(String key,int db,String type,String value){
                jedisPool = new JedisPool(config, ADDR, PORT, 3000,AUTH,db);
                Jedis jedis = getJedis();
                    if(type.equalsIgnoreCase("string")){
                        jedis.set(key,value);
                        close(jedis);
                    }
                    if(type.equalsIgnoreCase("hash")){
                        Gson gson = new Gson();
                        Map<String,String> map = gson.fromJson(value, HashMap.class);
                        jedis.hmset(key,map);
//                        jedis.hmset(key,value);
                        System.out.println("成功");
                        close(jedis);
                    }
                    if (type.equalsIgnoreCase("set")){
                        String strs = value;
                        String str[] = strs.split(",");
                        List <String> list = Arrays.asList(str);
                        for(String string :list){
                            jedis.sadd(key,string);
                        }
                        close(jedis);
                    }
                    if(type.equalsIgnoreCase("list")){
                        String strs = value;
                        String str[] = strs.split(",");
                        List <String> list = Arrays.asList(str);
                        for(String string :list){
                            jedis.lpush(key,string);
                        }
                    }
                    System.out.println("key:"+key+"类型："+type);
        }

        public static void main(String[] args) {
            jedisPool = new JedisPool(config, ADDR, PORT, 3000,AUTH,2);

            Jedis jedis = getJedis();
            long in =jedis.llen("listting");
            List<String> list = jedis.lrange("listting",0,in);
            //list对象转换为String 对象
            StringBuilder result = new StringBuilder();
            boolean first = true;
            //第一个前面不拼接","
            for(String string :list) {
                if(first) {
                    first=false;
                }else{
                    result.append(",");
                }
                result.append(string);
            }
            String str = result.toString();
            System.out.println("str:"+str);



        }




}
